import WaPermission from "./js_sdk/wa-permission/permission.js";
import navigate from './modules/navigate.js';
import auth from './modules/auth.js';
import request from './modules/request.js';
import share from './modules/share.js';
import pages from './modules/pages.js';

/**
 * 跳转众益健康设置
 */
function checkPermission()
{
	// #ifdef APP
		//跳转设置
		WaPermission.gotoAppPermissionSetting();
	// #endif
}

/**
 * 显示提示框
 * @param {string} title 提示文字  
 * @param {string} type 类型（success、error、fail、exception、loading、none） 
 * @param {int} timeout 自动关闭时间（毫秒）  
 * @param {string} position 弹窗位置(top、center、bottom)  
 * @param {bool} mask 是否设置透明蒙层避免穿透点击  
 */
function toastAlert(title, type = 'none', timeout = 2000, position = 'center', mask = true)
{
	return uni.showToast({
		title: title,
		icon: type,
		duration: timeout,
		position: position,
		mask: mask
	});
}

/**
 * 隐藏提示框
 */
function toastHide()
{
	//隐藏提示框
	return uni.hideToast();
}

/**
 * 显示loading）
 * @param {string} title 提示文字  
 * @param {bool} mask 是否设置透明蒙层避免穿透点击  
 */
function toastLoading(title, mask=true)
{
	//判断元素
	title = title ? title : '加载中';
	//显示loading
	var object = uni.showLoading({
		title: title,
		mask: mask
	});
	//返回对象
	return object;
}

/**
 * 隐藏loading
 */
function toastLoadingHide()
{
	//隐藏loading
	return uni.hideLoading();
}
/**
 * 保存图片至本地相册
 * @param {Object} urls
 */
function saveImagesToLocalAlbums(urls)
{
	return new Promise((resolve, reject) => {
		// #ifndef H5
			//加载loading
			toastLoading('正在下载...', true);
			//循环文件
			urls.forEach((url, index) => {
				//下载图片
				uni.downloadFile({
					url: url,
					success: (res) => {
						//保存至本地
						uni.saveImageToPhotosAlbum({
							filePath: res.tempFilePath,
							success: function() {
								console.log(url+' 保存本地成功');
								toastAlert('保存成功', 'success', 2000)
							},
							fail: function() {
								toastAlert('图片保存失败', 'none', 2000)
								reject('图片保存失败');
							}
						})
					},
					fail:() => {
						toastAlert('图片下载失败', 'none', 2000)
						reject('图片下载失败');
					}
				})
			});
			//关闭loading
			toastLoadingHide();
		// #endif
		//返回成功
		resolve(true);
	});
}
/**
 * 移除数组某一项
 * @param {Object} arr
 * @param {Object} item
 */
function removeArrItem(arr, item)
{
	//移除信息
	arr.splice(arr.findIndex(value => {
		if (value == item) {
			return true;
		}
	}), 1);
	//返回成功
	return true;
}

/**
 * 获取两数组差值/交集
 * @param {array} arr_main 主要参照数组  
 * @param {array} arr_less 比对数组  
 * @param {bool} reverse 是否反转（true : 取差值，false: 取交集）  
 */
function arrDiff(arr_main, arr_less, reverse = false)
{
	//整理结果
	var result = [];
	//判断信息
	if (arr_main.length > 0 || arr_less.length > 0) {
		//获取结果
		result = arr_main.filter((item) => {
			//判断结果
			var included = arr_less.includes(item);
			//判断是否反转
			if (reverse) {
				//反转结果
				included = !included;
			}
			//返回结果判断
			return included;
		});
	}
	//返回结果
	return result;
}
/**
 * 覆盖对象
 * @param {Object} base_object	基础操作对象
 * @param {Object} object 覆盖内容
 */
function objectMerge(base_object, object)
{
	//判断有效性
	if (!object || typeof object == 'undefined') {
		//直接返回基础对象
		return base_object;
	}
	//获取所有key
	var keys = Object.keys(object), base_keys = Object.keys(base_object);
	//判断长度
	if (keys.length <= 0) {
		//直接返回基础对象
		return base_object;
	}
	//循环数组
	for (var ak in object) {
		//判断是否存在
		if (base_keys.includes(ak)) {
			//覆盖数据
			base_object[ak] = object[ak];
		}
	}
	//返回数据
	return base_object;
}
/**
 * 重写样式为字符串形式（兼容小程序可识别，不建议直接使用对象）
 * @param {Object} styles
 */
function rewriteStyleobject(styles) {
	//整理信息
	var result = [];
	//循环样式
	for (var key in styles) {
		//设置样式
		result.push(key+': '+styles[key]);
	}
	//返回样式
	return result.join('; ');
}

/**
 * 设置粘贴板内容
 * @param {*} content 
 */
function clipboardData(content) {
	//设置众益健康剪贴板的内容
	uni.setClipboardData({
		data: content,
		success: function () {
			//提示成功
			toastAlert('复制成功', 'success');
		}
	});
}


//暴露方法
module.exports = {
	checkPermission: checkPermission,
	toastLoading: toastLoading,
	toastLoadingHide: toastLoadingHide,
	toastAlert: toastAlert,
	toastHide: toastHide,
	saveImagesToLocalAlbums: saveImagesToLocalAlbums,
	arrDiff: arrDiff,
	objectMerge: objectMerge,
	removeArrItem: removeArrItem,
	rewriteStyleobject: rewriteStyleobject,
	clipboardData: clipboardData,
	navigate: navigate,
	auth: auth,
	request: request,
	share: share,
	pages: pages
}